package cn.com.jinhao.provider.business.service;

import cn.com.jinhao.hotline.commons.vo.business.HistoryDispatchResponseVO;
import cn.com.jinhao.hotline.commons.vo.business.dispatch.DispatchCondition;
import cn.com.jinhao.provider.business.entity.Dispatch;
import cn.com.jinhao.provider.business.vo.DispatchInfoRequestVO;
import cn.com.jinhao.hotline.commons.vo.user.OrganizerResponseVO;
import cn.com.jinhao.provider.business.vo.DispatchReqeustVo;


import java.util.List;
import java.util.Map;

/**
 * HotLine
 * <p>Description: 派单业务接口类</p>
 *
 * @author ShaneMew
 * @version 1.0
 * @date 2020/02/17
 * @since 2020/02/17
 */

public interface DispatchService {
    /**
     * 派单新增方法
     *
     * @param dispatchReqeustVo 派单信息   {@link DispatchReqeustVo}
     * @throws Exception exception
     */
    void addBatch(DispatchReqeustVo dispatchReqeustVo) throws Exception;

    /**
     * 派单新增批量方法
     *
     * @param dispatchInfoRequestVO 派单信息
     * @throws Exception exception
     */
    void addDirectBatch(DispatchInfoRequestVO dispatchInfoRequestVO) throws Exception;

    /**
     * 更新派单信息
     *
     * @param dispatch dispatch 派单信息   {@link Dispatch}
     */
    int update(Dispatch dispatch);

    /**
     * 历史派单列表
     *
     * @param eventCode 事件编号
     * @return List
     */
    List<HistoryDispatchResponseVO> historyDispatch(String eventCode);

    /**
     * 修改主办单位
     * @param eventCode 事件编码
     * @param deptCode  主办单位编码
     * @return {@link OrganizerResponseVO}
     * @throws Exception 异常
     */
    OrganizerResponseVO updateOrganizerDispatch(String eventCode, String deptCode) throws Exception;

    /**
     * 通过派单编码查询工单详情
     *
     * @param code 派单编码
     * @return {@link Dispatch}
     */
    Dispatch selectByCode(String code);

    /**
     * 通过派单编码删除派单信息
     *
     * @param code 派单编码
     */
    void deleteByCode(String code);

    /**
     * 根据部门编码获取当前部门的可撤单的派单列表
     * @param deptCode 部门编码
     * @param pageNo 每页的条数
     * @param pageSize 页数
     * @return List
     */
    Map<String,Object> listDispatchByCancel(String deptCode, int pageNo, int pageSize) throws Exception;

    /**
     * 通过条件查询事件列表
     * @param conditions  查询条件
     * @return map 派单列表
     */
    Map<String, Object> selectByCondition(DispatchCondition conditions) throws Exception;
}
